// new 手写
function Person(name, age){
    //{}
    //函数的运行过程就是构造对象的过程
    this.name = name;
    this.age = age;
    //return {}
}
Person.prototype.say = function(){
    console.log(this.age);
}

let p2 = {};
console.log(p2.__proto__);
p2 = new Person('李林傻逼',99);
console.log(Object.hasOwnProperty('name'),Object.hasOwnProperty('say'));

// p2.__proto__ Object

// p2? 做了什么事？ 给？
// p2.__proto__ Object -> Person.prototype
// JS 是原型式的面向对象
// p2 的原型对象，由默认的 Object 中间插入 Person.prototype
// p2.say

//手写new myNew
//new Person
//reset 运算符
function myNew(fn, ...args){
    // console.log(fn,args);
    //Object.create
    let obj = Object.create(fn.prototype);
    //obj上， this 属性？
    Person.call(obj,...args)
    // 构造的过程 函数运行一下，并且 this 指向obj？
    // 原型的设置
    // 返回 对象
    console.log(obj);
    return obj;
}
let p3 = myNew(Person,'李林',99);
console.log(p3);